package calculadora;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;

public class Calculadora {

  private LinkedHashMap<Integer, RenglonTrans> tablaAgente1;
  private LinkedHashMap<Integer, RenglonTrans> tablaAgente2;
  private LinkedHashMap<Integer, RenglonTrans> tablaPromotor1;
  private LinkedHashMap<Integer, RenglonTrans> tablaPromotor2;
  private ArrayList<Integer> llavesAgente1;
  private ArrayList<Integer> llavesAgente2;
  private ArrayList<Integer> llavesPromotor1;
  private ArrayList<Integer> llavesPromotor2;
  private ArrayList<Integer> acumuladoAgente1;
  private ArrayList<Integer> acumuladoAgente2;
  private ArrayList<Integer> acumuladoPromotor1;
  private ArrayList<Integer> acumuladoPromotor2;
  private int mesSeleccionado;
  private int tipoFiltro;
  private HashMap<String, Integer> mestrim;

  public Calculadora(int indiceMes, int tipoFiltro, HashMap<String, Integer> mestrim) {
    this.tablaAgente1 = new LinkedHashMap<Integer, RenglonTrans>();
    this.tablaAgente2 = new LinkedHashMap<Integer, RenglonTrans>();
    this.tablaPromotor1 = new LinkedHashMap<Integer, RenglonTrans>();
    this.tablaPromotor2 = new LinkedHashMap<Integer, RenglonTrans>();
    this.llavesAgente1 = new ArrayList<Integer>();
    this.llavesAgente2 = new ArrayList<Integer>();
    this.llavesPromotor1 = new ArrayList<Integer>();
    this.llavesPromotor2 = new ArrayList<Integer>();
    this.acumuladoAgente1 = new ArrayList<Integer>();
    this.acumuladoAgente2 = new ArrayList<Integer>();
    this.acumuladoPromotor1 = new ArrayList<Integer>();
    this.acumuladoPromotor2 = new ArrayList<Integer>();
    this.mesSeleccionado = indiceMes;
    this.tipoFiltro = tipoFiltro;
    this.mestrim = mestrim;
  }

  public ArrayList<Integer> getAcumuladoAgente1() {
    return acumuladoAgente1;
  }

  public ArrayList<Integer> getAcumuladoAgente2() {
    return acumuladoAgente2;
  }

  public ArrayList<Integer> getAcumuladoPromotor1() {
    return acumuladoPromotor1;
  }

  public ArrayList<Integer> getAcumuladoPromotor2() {
    return acumuladoPromotor2;
  }

  public int getIndiceMesSeleccionado() {
    return mesSeleccionado;
  }

  public ArrayList<Integer> getLlavesAgente1() {
    return llavesAgente1;
  }

  public ArrayList<Integer> getLlavesAgente2() {
    return llavesAgente2;
  }

  public ArrayList<Integer> getLlavesPromotor1() {
    return llavesPromotor1;
  }

  public ArrayList<Integer> getLlavesPromotor2() {
    return llavesPromotor2;
  }

  public LinkedHashMap<Integer, RenglonTrans> getTablaAgente1() {
    return tablaAgente1;
  }

  public LinkedHashMap<Integer, RenglonTrans> getTablaAgente2() {
    return tablaAgente2;
  }

  public LinkedHashMap<Integer, RenglonTrans> getTablaPromotor1() {
    return tablaPromotor1;
  }

  public LinkedHashMap<Integer, RenglonTrans> getTablaPromotor2() {
    return tablaPromotor2;
  }

  /*
   * Ejecuta el query que nos devuelve el acumulado por ramo de cada agente en la base
   * de Datos tomando en cuenta los agentes que no tienen marca o que son DXP y agrega 
   * los datos de los agentes en un hash y un arraylist con los id's de los agentes
   */
  public void ejecutaQueryAcuAgente1(Statement st) throws SQLException {
    ResultSet res = null;
    try {
      res = st.executeQuery("SELECT periodo,id_agente, nombre_agente, id_ramo_contable,"
              + " sistema_origen, SUM(prima_pagada) AS prima, ramo, columna FROM convenios_pp "
              + "WHERE (marca=0 OR marca=1) " + " "
              + "GROUP BY periodo, id_agente, nombre_agente, sistema_origen, id_ramo_contable, "
              + "ramo, columna");
    } catch (Exception ex) {
      System.err.println("Warning: SELECT " + ex.getMessage());
    }

    RenglonTrans r = null;
    while (res.next()) {
      if (this.tablaAgente1.containsKey(res.getInt("id_agente"))) {
        r = this.tablaAgente1.get(res.getInt("id_agente"));
      } else {
        r = new RenglonTrans();
        this.llavesAgente1.add(res.getInt("id_agente"));
        r.inserta(1, res.getString("id_agente"));
        r.inserta(3, res.getString("nombre_agente"));
      }
      r.inserta(res.getInt("columna") + 3, res.getInt("ramo"), res.getDouble("prima"));
      r.insertaTotal();
      r.insetaAcud();
      r.insetaAcuv();
      r.insetaAcua();
      this.tablaAgente1.put(res.getInt("id_agente"), r);
    }
  }

  /*
   * Ejecuta el query que nos devuelve el acumulado por ramo de cada promotor en la base
   * de Datos tomando en cuenta los promotores que no tienen marca o que son DXP y agrega 
   * los datos de los agentes en un hash y un arraylist con los id's de los promotores
   */
  public void ejecutaQueryAcuProm1(Statement st) throws SQLException {
    ResultSet res = null;
    try {
      res = st.executeQuery("SELECT periodo,id_promotoria, nom_promotoria, id_ramo_contable, "
              + "sistema_origen, SUM(prima_pagada) AS prima, ramo, columna FROM convenios_pp "
              + "WHERE (marca=0 OR marca=1) " + " "
              + "GROUP BY periodo,id_promotoria, nom_promotoria, sistema_origen, id_ramo_contable, "
              + "ramo, columna");
    } catch (Exception ex) {
      System.err.println("Warning: SELECT " + ex.getMessage());
    }
    RenglonTrans r = null;
    while (res.next()) {
      if (this.tablaPromotor1.containsKey(res.getInt("id_promotoria"))) {
        r = this.tablaPromotor1.get(res.getInt("id_promotoria"));
      } else {
        r = new RenglonTrans();
        this.llavesPromotor1.add(res.getInt("id_promotoria"));
        r.inserta(2, res.getString("id_promotoria"));
        r.inserta(3, res.getString("nom_promotoria"));
      }
      r.inserta(res.getInt("columna") + 3, res.getInt("ramo"), res.getDouble("prima"));
      r.insertaTotal();
      r.insetaAcud();
      r.insetaAcuv();
      r.insetaAcua();
      this.tablaPromotor1.put(res.getInt("id_promotoria"), r);
    }
  }

  /*
   * Ejecuta el query que nos devuelve el acumulado por ramo de cada agente en la base
   * de Datos tomando en cuenta los agentes que no tienen marca y agrega 
   * los datos de los agentes en un hash y un arraylist con los id's de los agentes
   */
  public void ejecutaQueryAcuAgente2(Statement st) throws SQLException {
    ResultSet res = null;
    try {
      res = st.executeQuery("SELECT periodo,id_agente, nombre_agente, id_ramo_contable, "
              + "sistema_origen, SUM(prima_pagada) AS prima, ramo, columna "
              + "FROM convenios_pp WHERE marca=0 " + " GROUP BY periodo, id_agente, nombre_agente, sistema_origen,"
              + " id_ramo_contable, ramo, columna");
    } catch (Exception ex) {
      System.err.println("Warning: SELECT " + ex.getMessage());
    }
    RenglonTrans r = null;
    while (res.next()) {
      if (this.tablaAgente2.containsKey(res.getInt("id_agente"))) {
        r = this.tablaAgente2.get(res.getInt("id_agente"));
      } else {
        r = new RenglonTrans();
        this.llavesAgente2.add(res.getInt("id_agente"));
        r.inserta(1, res.getString("id_agente"));
        r.inserta(3, res.getString("nombre_agente"));
      }
      r.inserta(res.getInt("columna") + 3, res.getInt("ramo"), res.getDouble("prima"));
      r.insertaTotal();
      r.insetaAcud();
      r.insetaAcuv();
      r.insetaAcua();
      this.tablaAgente2.put(res.getInt("id_agente"), r);
    }
  }

  /*
   * Ejecuta el query que nos devuelve el acumulado por ramo de cada promotor en la base
   * de Datos tomando en cuenta los promotores que no tienen marca y agrega 
   * los datos de los promotores en un hash y un arraylist con los id's de los promotores
   */
  public void ejecutaQueryAcuProm2(Statement st) throws SQLException {
    ResultSet res = null;
    try {
      res = st.executeQuery("SELECT periodo, id_promotoria, nom_promotoria, "
              + "id_ramo_contable, sistema_origen, SUM(prima_pagada) "
              + "AS prima, ramo, columna FROM convenios_pp WHERE marca=0" + " GROUP BY periodo, id_promotoria, "
              + "nom_promotoria, sistema_origen, id_ramo_contable, ramo, columna");
    } catch (Exception ex) {
      System.err.println("Warning: SELECT " + ex.getMessage());
    }

    RenglonTrans r = null;
    while (res.next()) {
      if (this.tablaPromotor2.containsKey(res.getInt("id_promotoria"))) {
        r = this.tablaPromotor2.get(res.getInt("id_promotoria"));
      } else {
        r = new RenglonTrans();
        this.llavesPromotor2.add(res.getInt("id_promotoria"));
        r.inserta(2, res.getString("id_promotoria"));
        r.inserta(3, res.getString("nom_promotoria"));
      }

      r.inserta(res.getInt("columna") + 3, res.getInt("ramo"), res.getDouble("prima"));
      r.insertaTotal();
      r.insetaAcud();
      r.insetaAcuv();
      r.insetaAcua();
      this.tablaPromotor2.put(res.getInt("id_promotoria"), r);
    }
  }

  /*
   * Genera los totales  los porcentajes de bono por cada agente en la tabla de condiciones
   * para el Acumulado 1
   * 
   */
  public void hazCalculosAgente1(Statement st) throws SQLException {
    int mes = this.mesSeleccionado;
    Iterator<Integer> iterator = this.llavesAgente1.iterator();
    RenglonTrans renglon = null;
    double meta = 0;

    while (iterator.hasNext()) {
      renglon = this.tablaAgente1.get(iterator.next());
      int id = Integer.parseInt(renglon.getRenglones()[1]);
      String[] cond = getCondicionesAgente(id, mes, st);
      if (cond != null) {
        if (cond[0].trim().toLowerCase().equals("agente")) {
          if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_PRODUCCION) {
            int mesTrim = mestrim.get(cond[1] + "." + id + "." + cond[18] + "." + cond[19]);
            if (mes % 3 == 0) {
              if (mesTrim == 1) {
                meta = Double.parseDouble(cond[mes + 3]) + Double.parseDouble(cond[mes + 4]) + Double.parseDouble(cond[mes + 5]);
              } else {
                meta = Double.parseDouble(cond[mes + 5]);
              }
            } else {
              meta = Double.parseDouble(cond[mes + 5]);
            }
          } else if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_CALIDAD) {
            meta = 0;
            int j = mes;
            for (int i = 6; j >= 1; i++) {
              meta += Double.parseDouble(cond[i]);
              j--;
            }
          }

          int[] adicionales = new int[2];
          adicionales[0] = Integer.parseInt(cond[18]);
          adicionales[1] = Integer.parseInt(cond[19]);
          if (adicionales[0] != -1 && existeIdAgente(adicionales[0])) {
            renglon = sumaAgente1(id, adicionales[0]);
          }
          if (adicionales[1] != -1 && existeIdAgente(adicionales[1])) {
            renglon = sumaAgente1(id, adicionales[1]);
          }

          double metaperiodo = meta;
          double alcance;
          renglon.getRenglones()[0] = cond[0];
          renglon.getRenglones()[2] = cond[1];

          double total = Double.parseDouble(renglon.getRenglones()[18]);
          meta += Double.parseDouble(cond[5]);
          total /= meta;
          renglon.getRenglones()[19] = cond[5];
          renglon.getRenglones()[20] = String.valueOf(Double.parseDouble(renglon.getRenglones()[18]) + Double.parseDouble(renglon.getRenglones()[19]));
          double metaAlcance = Double.parseDouble(renglon.getRenglones()[20]);
          renglon.getRenglones()[21] = String.valueOf(metaperiodo);
          if (metaperiodo == 0) {
            alcance = 1;
          }
          alcance = metaAlcance / metaperiodo;
          if (alcance > 1) {
            alcance = 1;
          }
          renglon.getRenglones()[22] = String.valueOf(alcance);
          renglon.getRenglones()[23] = String.valueOf(Double.parseDouble(cond[2]));
          renglon.getRenglones()[24] = String.valueOf(Double.parseDouble(cond[3]));
          renglon.getRenglones()[25] = String.valueOf(Double.parseDouble(cond[4]));
          renglon.getRenglones()[26] = String.valueOf(alcance * Double.parseDouble(cond[2]));
          renglon.getRenglones()[27] = String.valueOf(alcance * Double.parseDouble(cond[3]));
          renglon.getRenglones()[28] = String.valueOf(alcance * Double.parseDouble(cond[4]));
          this.tablaAgente1.put(id, renglon);
          this.acumuladoAgente1.add(id);
        }
      }
    }
  }

  /*
   * Genera los totales  los porcentajes de bono por cada agente en la tabla de condiciones
   * para el Acumulado 2
   */
  public void hazCalculosAgente2(Statement st) throws SQLException {
    int mes = this.mesSeleccionado;
    Iterator<Integer> iterator = this.llavesAgente2.iterator();
    RenglonTrans renglon = null;
    double meta = 0;
    while (iterator.hasNext()) {
      renglon = this.tablaAgente2.get(iterator.next());
      int id = Integer.parseInt(renglon.getRenglones()[1]);
      String[] cond = getCondicionesAgente(id, mes, st);
      if (cond != null) {
        if (cond[0].trim().toLowerCase().equals("agente")) {
          if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_PRODUCCION) {
            int mesTrim = mestrim.get(cond[1] + "." + id + "." + cond[18] + "." + cond[19]);
            if (mes % 3 == 0) {
              if (mesTrim == 1) {
                meta = Double.parseDouble(cond[mes + 3]) + Double.parseDouble(cond[mes + 4]) + Double.parseDouble(cond[mes + 5]);
              } else {
                meta = Double.parseDouble(cond[mes + 5]);
              }
            } else {
              meta = Double.parseDouble(cond[mes + 5]);
            }
          } else if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_CALIDAD) {
            meta = 0;
            int j = mes;
            for (int i = 6; j >= 1; i++) {
              meta += Double.parseDouble(cond[i]);
              j--;
            }
          }

          int[] adicionales = new int[2];
          adicionales[0] = Integer.parseInt(cond[18]);
          adicionales[1] = Integer.parseInt(cond[19]);
          if (adicionales[0] != -1 && existeIdAgente(adicionales[0])) {
            renglon = sumaAgente2(id, adicionales[0]);
          }
          if (adicionales[1] != -1 && existeIdAgente(adicionales[1])) {
            renglon = sumaAgente2(id, adicionales[1]);
          }

          double metaperiodo = meta;
          double alcance;
          renglon.getRenglones()[0] = cond[0];
          renglon.getRenglones()[2] = cond[1];
          double total = Double.parseDouble(renglon.getRenglones()[18]);
          meta += Double.parseDouble(cond[5]);
          total /= meta;
          renglon.getRenglones()[19] = cond[5];
          renglon.getRenglones()[20] = String.valueOf(Double.parseDouble(renglon.getRenglones()[18]) + Double.parseDouble(renglon.getRenglones()[19]));
          double metaAlcance = Double.parseDouble(renglon.getRenglones()[20]);
          renglon.getRenglones()[21] = String.valueOf(metaperiodo);
          if (metaperiodo == 0) {
            alcance = 1;
          }
          alcance = metaAlcance / metaperiodo;
          if (alcance > 1) {
            alcance = 1;
          }
          renglon.getRenglones()[22] = String.valueOf(alcance);
          renglon.getRenglones()[23] = String.valueOf(alcance * Double.parseDouble(cond[2]));
          renglon.getRenglones()[24] = String.valueOf(alcance * Double.parseDouble(cond[3]));
          renglon.getRenglones()[25] = String.valueOf(alcance * Double.parseDouble(cond[4]));
          this.tablaAgente2.put(id, renglon);
          this.acumuladoAgente2.add(id);
        }
      }
    }
  }

  /*
   * Genera los totales  los porcentajes de bono por cada promotor en la tabla de condiciones
   * para el Acumulado 1
   */
  public void hazCalculosPromotor1(Statement st) throws SQLException {
    int mes = this.mesSeleccionado;

    Iterator<Integer> iterator = this.llavesPromotor1.iterator();
    RenglonTrans renglon = null;
    double meta = 0;

    while (iterator.hasNext()) {
      renglon = this.tablaPromotor1.get(iterator.next());
      int id = -1;
      if (!renglon.getRenglones()[2].equals("-1.0")) {
        id = Integer.parseInt(renglon.getRenglones()[2]);
      }

      String[] cond = getCondicionesPromotor(id, mes, st);
      if (cond != null) {
        if (cond[0].trim().toLowerCase().equals("promotor")) {
          if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_PRODUCCION) {
            int mesTrim = mestrim.get(id + "." + cond[1] + "." + cond[18] + "." + cond[19]);
            if (mes % 3 == 0) {
              if (mesTrim == 1) {
                meta = Double.parseDouble(cond[mes + 3]) + Double.parseDouble(cond[mes + 4]) + Double.parseDouble(cond[mes + 5]);
              } else {
                meta = Double.parseDouble(cond[mes + 5]);
              }
            } else {
              meta = Double.parseDouble(cond[mes + 5]);
            }
          } else if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_CALIDAD) {
            meta = 0;
            for (int i = 6; i <= mes + 5; i++) {
              meta += Double.parseDouble(cond[i]);
            }
          }

          int[] adicionales = new int[2];
          adicionales[0] = Integer.parseInt(cond[18]);
          adicionales[1] = Integer.parseInt(cond[19]);
          if (adicionales[0] != -1 && existeIdPromotor(adicionales[0])) {
            renglon = sumaPromotor1(id, adicionales[0]);
          }
          if (adicionales[1] != -1 && existeIdPromotor(adicionales[1])) {
            renglon = sumaPromotor1(id, adicionales[1]);
          }

          double metaperiodo = meta;
          double alcance;
          renglon.getRenglones()[0] = cond[0];
          renglon.getRenglones()[1] = cond[1];
          double total = Double.parseDouble(renglon.getRenglones()[18]);
          meta += Double.parseDouble(cond[5]);
          total /= meta;
          renglon.getRenglones()[19] = cond[5];
          renglon.getRenglones()[20] = String.valueOf(Double.parseDouble(renglon.getRenglones()[18]) + Double.parseDouble(renglon.getRenglones()[19]));
          double metaAlcance = Double.parseDouble(renglon.getRenglones()[20]);
          renglon.getRenglones()[21] = String.valueOf(metaperiodo);
          if (metaperiodo == 0) {
            alcance = 1;
          }
          alcance = metaAlcance / metaperiodo;
          if (alcance > 1) {
            alcance = 1;
          }
          renglon.getRenglones()[22] = String.valueOf(alcance);
          renglon.getRenglones()[23] = String.valueOf(Double.parseDouble(cond[2]));
          renglon.getRenglones()[24] = String.valueOf(Double.parseDouble(cond[3]));
          renglon.getRenglones()[25] = String.valueOf(Double.parseDouble(cond[4]));
          renglon.getRenglones()[26] = String.valueOf(alcance * Double.parseDouble(cond[2]));
          renglon.getRenglones()[27] = String.valueOf(alcance * Double.parseDouble(cond[3]));
          renglon.getRenglones()[28] = String.valueOf(alcance * Double.parseDouble(cond[4]));
          this.tablaPromotor1.put(id, renglon);
          this.acumuladoPromotor1.add(id);
        }
      }
    }
  }

  /*
   * Genera los totales  los porcentajes de bono por cada promotor en la tabla de condiciones
   * para el Acumulado 2
   */
  public void hazCalculosPromotor2(Statement st) throws SQLException {
    int mes = this.mesSeleccionado;
    Iterator<Integer> iterator = this.llavesPromotor2.iterator();
    RenglonTrans renglon = null;
    double meta = 0;
    while (iterator.hasNext()) {
      renglon = this.tablaPromotor2.get(iterator.next());
      int id = -1;
      if (!renglon.getRenglones()[2].equals("-1.0")) {
        id = Integer.parseInt(renglon.getRenglones()[2]);
      }

      String[] cond = getCondicionesPromotor(id, mes, st);
      if (cond != null) {
        if (cond[0].trim().toLowerCase().equals("promotor")) {
          if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_PRODUCCION) {
            int mesTrim = mestrim.get(id + "." + cond[1] + "." + cond[18] + "." + cond[19]);
            if (mes % 3 == 0) {
              if (mesTrim == 1) {
                meta = Double.parseDouble(cond[mes + 3]) + Double.parseDouble(cond[mes + 4]) + Double.parseDouble(cond[mes + 5]);
              } else {
                meta = Double.parseDouble(cond[mes + 5]);
              }
            } else {
              meta = Double.parseDouble(cond[mes + 5]);
            }
          } else if (tipoFiltro == lectores.LectorConvenios.FILTRO_BONOS_CALIDAD) {
            meta = 0;
            for (int i = 6; i <= mes + 5; i++) {
              meta += Double.parseDouble(cond[i]);
            }
          }

          int[] adicionales = new int[2];
          adicionales[0] = Integer.parseInt(cond[18]);
          adicionales[1] = Integer.parseInt(cond[19]);
          if (adicionales[0] != -1 && existeIdPromotor(adicionales[0])) {
            renglon = sumaPromotor2(id, adicionales[0]);
          }
          if (adicionales[1] != -1 && existeIdPromotor(adicionales[1])) {
            renglon = sumaPromotor2(id, adicionales[1]);
          }

          double metaperiodo = meta;
          double alcance;
          renglon.getRenglones()[0] = cond[0];
          renglon.getRenglones()[1] = cond[1];
          double total = Double.parseDouble(renglon.getRenglones()[18]);
          meta += Double.parseDouble(cond[5]);
          total /= meta;
          renglon.getRenglones()[19] = cond[5];
          renglon.getRenglones()[20] = String.valueOf(Double.parseDouble(renglon.getRenglones()[18]) + Double.parseDouble(renglon.getRenglones()[19]));
          double metaAlcance = Double.parseDouble(renglon.getRenglones()[20]);
          renglon.getRenglones()[21] = String.valueOf(metaperiodo);
          if (metaperiodo == 0) {
            alcance = 1;
          }
          alcance = metaAlcance / metaperiodo;
          if (alcance > 1) {
            alcance = 1;
          }
          renglon.getRenglones()[22] = String.valueOf(alcance);
          renglon.getRenglones()[23] = String.valueOf(alcance * Double.parseDouble(cond[2]));
          renglon.getRenglones()[24] = String.valueOf(alcance * Double.parseDouble(cond[3]));
          renglon.getRenglones()[25] = String.valueOf(alcance * Double.parseDouble(cond[4]));
          this.tablaPromotor2.put(id, renglon);
          this.acumuladoPromotor2.add(id);
        }
      }
    }
  }

  /*
   * Toma las condiciones del promotor de la tabla de condiciones.
   */
  public String[] getCondicionesPromotor(int id_promotor, int mes, Statement st) throws SQLException {
    String query = "SELECT ag_prom, id_agente,ppa,ppd,ppp,rechazos,enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre,adicional1,adicional2 FROM condiciones WHERE id_promotor=" + id_promotor;
    ResultSet res = st.executeQuery(query);
    ResultSetMetaData metaData = res.getMetaData();
    int columnCount = metaData.getColumnCount();
    if (res.next()) {
      String[] val = new String[columnCount];
      for (int i = 0; i < columnCount; i++) {
        val[i] = res.getString(i + 1);
      }
      return val;
    }
    return null;
  }

  /*
   * Toma las condiones del agente de la tabla de condiciones
   */
  public String[] getCondicionesAgente(int id_agente, int mes, Statement st) throws SQLException {
    String query = "SELECT ag_prom, id_promotor,ppa,ppd,ppp,rechazos,enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre,adicional1,adicional2 FROM condiciones WHERE id_agente=" + id_agente;
    ResultSet res = st.executeQuery(query);
    ResultSetMetaData metaData = res.getMetaData();
    int columnCount = metaData.getColumnCount();
    if (res.next()) {
      String[] val = new String[columnCount];
      for (int i = 0; i < columnCount; i++) {
        val[i] = res.getString(i + 1);
      }
      return val;
    }
    return null;
  }

  private boolean existeIdPromotor(int idPromotor) {
    return this.llavesPromotor1.contains(idPromotor);
  }

  private boolean existeIdAgente(int idAgente) {
    return this.llavesAgente1.contains(idAgente);
  }

  public RenglonTrans sumaAgente1(int id1, int id2) {
    RenglonTrans r1 = this.tablaAgente1.get(id1);
    RenglonTrans r2 = this.tablaAgente1.get(id2);

    for (int i = 4; i <= 18; i++) {
      double valorId1 = r1.getRenglones()[i] == null ? 0 : Double.parseDouble(r1.getRenglones()[i]);
      double valorId2 = r2.getRenglones()[i] == null ? 0 : Double.parseDouble(r2.getRenglones()[i]);
      r1.getRenglones()[i] = "" + (valorId1 + valorId2);
    }
    return r1;
  }

  public RenglonTrans sumaAgente2(int id1, int id2) {
    RenglonTrans r1 = this.tablaAgente2.get(id1);
    RenglonTrans r2 = this.tablaAgente2.get(id2);

    for (int i = 4; i <= 18; i++) {
      double valorId1 = r1.getRenglones()[i] == null ? 0 : Double.parseDouble(r1.getRenglones()[i]);
      double valorId2 = r2.getRenglones()[i] == null ? 0 : Double.parseDouble(r2.getRenglones()[i]);
      r1.getRenglones()[i] = "" + (valorId1 + valorId2);
    }
    return r1;
  }

  public RenglonTrans sumaPromotor1(int id1, int id2) {
    RenglonTrans r1 = this.tablaPromotor1.get(id1);
    RenglonTrans r2 = this.tablaPromotor1.get(id2);

    for (int i = 4; i <= 18; i++) {
      double valorId1 = r1.getRenglones()[i] == null ? 0 : Double.parseDouble(r1.getRenglones()[i]);
      double valorId2 = r2.getRenglones()[i] == null ? 0 : Double.parseDouble(r2.getRenglones()[i]);
      r1.getRenglones()[i] = "" + (valorId1 + valorId2);
    }
    return r1;
  }

  public RenglonTrans sumaPromotor2(int id1, int id2) {
    RenglonTrans r1 = this.tablaPromotor2.get(id1);
    RenglonTrans r2 = this.tablaPromotor2.get(id2);

    for (int i = 4; i <= 18; i++) {
      double valorId1 = r1.getRenglones()[i] == null ? 0 : Double.parseDouble(r1.getRenglones()[i]);
      double valorId2 = r2.getRenglones()[i] == null ? 0 : Double.parseDouble(r2.getRenglones()[i]);
      r1.getRenglones()[i] = "" + (valorId1 + valorId2);
    }
    return r1;
  }
}